hvm: Remove hvm-specific NMI flag and use generic flag instead.
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Thu, 6 Sep 2007 10:31:02 +0000 (11:31 +0100)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Thu, 6 Sep 2007 10:31:02 +0000 (11:31 +0100)
Signed-off-by: Keir Fraser <keir@xensource.com>
xen/arch/x86/domctl.c
xen/arch/x86/hvm/irq.c
xen/arch/x86/hvm/vioapic.c
xen/arch/x86/hvm/vlapic.c
xen/arch/x86/traps.c
xen/include/asm-x86/hvm/vcpu.h

index 3245a42bca7102d4b276ec2ab6982c59491dbcdf..24b579d466bad69c975d2c8e6aade1e7d919138b 100644 (file)
@@ -508,12 +508,8 @@ long arch_do_domctl(
         {
         case XEN_DOMCTL_SENDTRIGGER_NMI:
         {
-            ret = -ENOSYS;
-            if ( !is_hvm_domain(d) )
-                break;
-
             ret = 0;
-            if ( !test_and_set_bool(v->arch.hvm_vcpu.nmi_pending) )
+            if ( !test_and_set_bool(v->nmi_pending) )
                 vcpu_kick(v);
         }
         break;
index 9212e93fe15932bb982a353c94d78303ad93b6d2..b41295a273710f1221bc96687139578a7ace3c72 100644 (file)
@@ -289,7 +289,7 @@ enum hvm_intack hvm_vcpu_has_pending_irq(struct vcpu *v)
 {
     struct hvm_domain *plat = &v->domain->arch.hvm_domain;
 
-    if ( unlikely(v->arch.hvm_vcpu.nmi_pending) )
+    if ( unlikely(v->nmi_pending) )
         return hvm_intack_nmi;
 
     if ( vlapic_has_interrupt(v) != -1 )
@@ -306,7 +306,7 @@ int hvm_vcpu_ack_pending_irq(struct vcpu *v, enum hvm_intack type, int *vector)
     switch ( type )
     {
     case hvm_intack_nmi:
-        return test_and_clear_bool(v->arch.hvm_vcpu.nmi_pending);
+        return test_and_clear_bool(v->nmi_pending);
     case hvm_intack_lapic:
         return ((*vector = cpu_get_apic_interrupt(v)) != -1);
     case hvm_intack_pic:
index e73ad688814d4d680dc6cfa1e61c2648da31ab2c..6f708b5a0ca35c9c33c776c943c2a2e75899d764 100644 (file)
@@ -391,7 +391,7 @@ static void vioapic_deliver(struct hvm_hw_vioapic *vioapic, int irq)
                 continue;
             deliver_bitmask &= ~(1 << bit);
             if ( ((v = vioapic_domain(vioapic)->vcpu[bit]) != NULL) &&
-                 !test_and_set_bool(v->arch.hvm_vcpu.nmi_pending) )
+                 !test_and_set_bool(v->nmi_pending) )
                 vcpu_kick(v);
         }
         break;
index 712c7c7523340d8a81d0e3cb3762c104b241d1af..5d2fc73a3606722344deadad5100709d0655cc72 100644 (file)
@@ -294,7 +294,7 @@ static int vlapic_accept_irq(struct vcpu *v, int delivery_mode,
         break;
 
     case APIC_DM_NMI:
-        if ( !test_and_set_bool(v->arch.hvm_vcpu.nmi_pending) )
+        if ( !test_and_set_bool(v->nmi_pending) )
             vcpu_kick(v);
         break;
 
index 459077a822c7e0f244259fc9ce041a428b5abd85..9d9eb53725538dc73320161fc0ffa374f3b68976 100644 (file)
@@ -1890,7 +1890,7 @@ static void nmi_dom0_report(unsigned int reason_idx)
 
     set_bit(reason_idx, nmi_reason(d));
 
-    if ( !xchg(&v->nmi_pending, 1) )
+    if ( !test_and_set_bool(v->nmi_pending) )
         raise_softirq(NMI_SOFTIRQ); /* not safe to wake up a vcpu here */
 }
 
index c4ea85c189e8271f0034f421e7e64d2e1fe7e193..d790eb2037a4479ef2edae5e6d622a0f7ede2143 100644 (file)
@@ -46,9 +46,6 @@ struct hvm_vcpu {
     s64                 cache_tsc_offset;
     u64                 guest_time;
 
-    /* Is an NMI pending for delivery to this VCPU core? */
-    bool_t              nmi_pending; /* NB. integrate flag with save/restore */
-
     /* Lock and list for virtual platform timers. */
     spinlock_t          tm_lock;
     struct list_head    tm_list;